#ifndef SRC_S2E_PLUGINS_PYTHON_INSTRUCTION_H_
#define SRC_S2E_PLUGINS_PYTHON_INSTRUCTION_H_

#include "xtypes.h"

namespace s2e {
namespace plugins {
class Instruction {
public:
	s2e::uint64 address;
	s2e::uint8 opcode[32];
	s2e::uint32 size;

  void copy(const Instruction& other);

public:
	Instruction();
	Instruction(const s2e::uint8* opcode, s2e::uint32 opSize);
	Instruction(const Instruction& other);
    Instruction& operator=(const Instruction& other);
	virtual ~Instruction();
	void setOpcode(const s2e::uint8* opcode, s2e::uint32 size);
    const s2e::uint8* getOpcode(void) const;
    s2e::uint32 getSize(void) const;
    s2e::uint64 getAddress(void) const;
};
 std::ostream& operator<<(std::ostream& stream, const Instruction& inst);
 std::ostream& operator<<(std::ostream& stream, const Instruction* inst);
}
}
#endif /* SRC_S2E_PLUGINS_PYTHON_INSTRUCTION_H_ */
